package org.db.ui;

import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DecimalFormat;
import java.util.List;

import javax.swing.ButtonGroup;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import org.db.Manager;
import org.db.dao.KruemmungslinienDAO;
import org.db.dao.Uebergangsbogen;
import org.db.dao.UeberhoehungslinienDAO;
import org.db.dao.Ueberhoehungsrampe;
import org.db.dao.change.AddProjektElement;
import org.db.dao.change.RemoveProjektElement;
import org.db.dao.change.UpdateProjektElement;

/**
 * 
 * @author Lutz
 */
public class KruemmungslinienDialog extends CloseCommitDialog
		implements
			ActionListener,
			KeyListener,
			MouseListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = -622284041165411269L;

	private static final String StationException = "Bitte geben Sie eine Stationierung ein!";

	private static final String EndStationException = "Bitte überprüfen Sie den Wert für die Endstationierung!";

	private static final String RadiusException = "Bitte geben Sie einen Radius ein!";

	private static final String LaengeException = "Bitte überprüfen Sie die Länge für den Übergangsbogen!";

	private static final String BetaException = "Bitte überprüfen Sie den Wert für Beta!";

	private static final String UeberhException = "Bitte geben Sie eine Überhöhung zum Radius ein!";

	private static final String AnfStationException = "Bitte überprüfen Sie den Wert für die Anfangsstationierung!";

	private javax.swing.JButton jButtonCancel;

	private javax.swing.JButton jButtonNext;

	private javax.swing.JButton jButtonOK;

	private javax.swing.JCheckBox jCheckBoxLinksBogen;

	private javax.swing.JCheckBox jCheckBoxRechtsBogen;

	private javax.swing.JLabel jLabelLaengeUeBogen;

	@SuppressWarnings("rawtypes")
	private javax.swing.JComboBox jComboBoxUeBogen;

	private javax.swing.JLabel jLabel1;

	private javax.swing.JLabel jLabel16;

	private javax.swing.JLabel jLabel2;

	private javax.swing.JLabel jLabel3;

	private javax.swing.JLabel jLabel5;

	private javax.swing.JLabel jLabel6;

	private javax.swing.JLabel jLabel9;

	private javax.swing.JLabel jLabelUeArt;

	private javax.swing.JScrollPane jScrollPane1;

	private KruemmungslinienTable table;

	private DoubleTextField jTextBeta;

	private DoubleTextField jTextLaengeUeBogen;

	private DoubleTextField jTextRadius;

	private DoubleTextField jTextStation;

	private DoubleTextField jTextStationE;

	private javax.swing.JLabel jLabelGleistyp;

	@SuppressWarnings("rawtypes")
	private javax.swing.JComboBox jComboBoxElement;

	private javax.swing.JLabel jLabel4;

	private IntegerTextField jTextUeberhoehung;

	private int returnValue = 0;

	private KruemmungslinienDAO lastAddedDaoK;

	private DecimalFormat format1 = new DecimalFormat("0");

	private DecimalFormat format2 = new DecimalFormat("0.000");

	private DecimalFormat format3 = new DecimalFormat("0.0000");

	private KruemmungslinienDAO element2Edit = null;

	public KruemmungslinienDialog(JDialog owner) {
		super(owner);
		setModal(true);
		setTitle("Krümmungslinie");
		initComponents();
	}

	@SuppressWarnings({"rawtypes", "unchecked"})
	private void initComponents() {

		jLabel1 = new javax.swing.JLabel();
		jLabel3 = new javax.swing.JLabel();
		jTextStation = new DoubleTextField();
		jTextRadius = new DoubleTextField();
		jLabel2 = new javax.swing.JLabel();
		jTextBeta = new DoubleTextField();
		jLabel16 = new javax.swing.JLabel();
		jLabelLaengeUeBogen = new javax.swing.JLabel();
		jTextLaengeUeBogen = new DoubleTextField();
		jComboBoxUeBogen = new javax.swing.JComboBox();
		jButtonOK = new javax.swing.JButton();
		jButtonNext = new javax.swing.JButton();
		jButtonCancel = new javax.swing.JButton();
		jCheckBoxLinksBogen = new javax.swing.JCheckBox();
		jCheckBoxLinksBogen.setSelected(true);
		jCheckBoxRechtsBogen = new javax.swing.JCheckBox();
		ButtonGroup buttonCheckBox = new ButtonGroup();
		buttonCheckBox.add(jCheckBoxLinksBogen);
		buttonCheckBox.add(jCheckBoxRechtsBogen);
		jLabelUeArt = new javax.swing.JLabel();
		jLabel6 = new javax.swing.JLabel();
		jLabel9 = new javax.swing.JLabel();
		jTextStationE = new DoubleTextField();
		jScrollPane1 = new javax.swing.JScrollPane();
		table = new KruemmungslinienTable();
		table.addKeyListener(this);
		table.addMouseListener(this);
		jLabelGleistyp = new javax.swing.JLabel();
		jLabelGleistyp.setText(Manager.getInstance().getCurrentGleis()
				.toString());
		jLabel4 = new javax.swing.JLabel();
		jComboBoxElement = new javax.swing.JComboBox();
		jTextUeberhoehung = new IntegerTextField();
		jLabel5 = new javax.swing.JLabel();

		setPreferredSize(new java.awt.Dimension(925, 500));
		setResizable(false);

		jTextRadius.setVisible(false);
		jTextUeberhoehung.setVisible(false);

		jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
		jLabel1.setText("Krümmungslinie");

		jLabel4.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabel4.setText("Elementtyp");

		jLabel3.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabel3.setText("Anfangsstation");

		jTextStation.setVerifyInputWhenFocusTarget(false);
		Double stationAnf = Manager.getInstance().getGleisElemente()
				.get(returnValue).getAnfangsStation();
		jTextStation.setText(stationAnf.toString());

		jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabel2.setText("Radius r=");
		jLabel2.setVisible(false);

		jLabel16.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		jLabel16.setText("RP  β=");

		jTextLaengeUeBogen.setToolTipText("Länge Überangsbogen");
		jTextLaengeUeBogen.setVisible(false);

		jLabelLaengeUeBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabelLaengeUeBogen.setText("lU =");
		jLabelLaengeUeBogen.setVisible(false);

		jLabelUeArt.setFont(new java.awt.Font("Tahoma", 3, 12));
		jLabelUeArt.setText("Klothoide");
		jLabelUeArt.setVisible(false);

		jComboBoxElement.setEditable(false);
		jComboBoxElement.setFont(new java.awt.Font("Tahoma", 1, 12));
		jComboBoxElement.setModel(new javax.swing.DefaultComboBoxModel(
				new String[]{"Gerade", "Kreisbogen", "Übergangsbogen"}));
		jComboBoxElement.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox jComboBoxElement = (JComboBox) e.getSource();
				String selectedItem = jComboBoxElement.getSelectedItem()
						.toString();
				showInputFieldsForElement(selectedItem);
			}
		});

		jComboBoxUeBogen.setEditable(false);
		jComboBoxUeBogen.setVisible(false);
		jComboBoxUeBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
		jComboBoxUeBogen.setModel(new javax.swing.DefaultComboBoxModel(
				new String[]{"UA", "UAs", "UAB", "UE", "UEs", "UEB", "UAss",
						"UEss", "UEBs", "UABs"}));
		jComboBoxUeBogen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JComboBox jComboBoxUeBogen = (JComboBox) e.getSource();
				Object selectedItemUeBogen = jComboBoxUeBogen.getSelectedItem();
				showInputFieldsForUeBogen(selectedItemUeBogen);
			}
		});

		jButtonOK.setFont(new java.awt.Font("Tahoma", 1, 12));
		jButtonOK.setText("Eingabe beenden");
		jButtonOK
				.setToolTipText("Prüfen und Speichern der Eingaben. Zurück zum Auswahlfenster.");
		jButtonOK.addActionListener(this);
		jButtonOK.addKeyListener(this);

		jButtonNext.setFont(new java.awt.Font("Tahoma", 1, 12));
		jButtonNext.setText("Element hinzufügen");
		jButtonNext
				.setToolTipText("Speichern der Eingaben in die Liste. Leeren der Textfelder für nächstes Element.");
		jButtonNext.addActionListener(this);
		jButtonNext.addKeyListener(this);

		jButtonCancel.setFont(new java.awt.Font("Tahoma", 1, 12));
		jButtonCancel.setText("Abbrechen");
		jButtonCancel
				.setToolTipText("Verwerfen der Eingaben. zurück zum Hauptmenü.");
		jButtonCancel.addActionListener(this);
		jButtonCancel.addKeyListener(this);

		jCheckBoxLinksBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
		jCheckBoxLinksBogen.setText("Linksbogen");
		jCheckBoxLinksBogen.setVisible(false);

		jCheckBoxRechtsBogen.setFont(new java.awt.Font("Tahoma", 1, 12));
		jCheckBoxRechtsBogen.setText("Rechtsbogen");
		jCheckBoxRechtsBogen.setVisible(false);

		jLabel6.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabel6.setText("Übergangsbogen");
		jLabel6.setVisible(false);

		jLabel9.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabel9.setText("Endstationierung");

		jScrollPane1.setViewportView(table);

		jLabelGleistyp.setFont(new java.awt.Font("Tahoma", 3, 12));
		jLabelGleistyp.setText(Manager.getInstance().getCurrentGleis()
				.toString());

		jLabel5.setFont(new java.awt.Font("Tahoma", 1, 12));
		jLabel5.setText("U = ");
		jLabel5.setVisible(false);

		JPanel wrapper = new JPanel();
		// javax.swing.GroupLayout layout = new
		// javax.swing.GroupLayout(getContentPane());
		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(wrapper);
		wrapper.setLayout(layout);
		getContentPane().add(new JScrollPane(wrapper));
		// getContentPane().setLayout(layout);
		layout.setHorizontalGroup(layout
				.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
				.addGroup(
						layout.createSequentialGroup()
								.addGroup(
										layout.createParallelGroup(
												javax.swing.GroupLayout.Alignment.LEADING)
												.addGroup(
														layout.createSequentialGroup()
																.addContainerGap()
																.addComponent(
																		jLabel1))
												.addGroup(
														layout.createSequentialGroup()
																.addGap(56, 56,
																		56)
																.addGroup(
																		layout.createParallelGroup(
																				javax.swing.GroupLayout.Alignment.TRAILING)
																				.addComponent(
																						jLabel3)
																				.addComponent(
																						jLabel2)
																				.addComponent(
																						jLabel6))
																.addPreferredGap(
																		javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																.addGroup(
																		layout.createParallelGroup(
																				javax.swing.GroupLayout.Alignment.LEADING,
																				false)
																				.addComponent(
																						jTextStation,
																						javax.swing.GroupLayout.DEFAULT_SIZE,
																						62,
																						Short.MAX_VALUE)
																				.addComponent(
																						jTextRadius)
																				.addComponent(
																						jLabel4)
																				.addComponent(
																						jComboBoxUeBogen,
																						0,
																						0,
																						Short.MAX_VALUE))
																.addGap(18, 18,
																		18)
																.addGroup(
																		layout.createParallelGroup(
																				javax.swing.GroupLayout.Alignment.LEADING)
																				.addGroup(
																						layout.createSequentialGroup()
																								.addComponent(
																										jLabelLaengeUeBogen)
																								.addPreferredGap(
																										javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																								.addComponent(
																										jTextLaengeUeBogen,
																										javax.swing.GroupLayout.PREFERRED_SIZE,
																										59,
																										javax.swing.GroupLayout.PREFERRED_SIZE))
																				.addComponent(
																						jComboBoxElement,
																						javax.swing.GroupLayout.PREFERRED_SIZE,
																						javax.swing.GroupLayout.DEFAULT_SIZE,
																						javax.swing.GroupLayout.PREFERRED_SIZE)
																				.addGroup(
																						layout.createSequentialGroup()
																								.addGroup(
																										layout.createParallelGroup(
																												javax.swing.GroupLayout.Alignment.TRAILING,
																												false)
																												.addGroup(
																														layout.createSequentialGroup()
																																.addComponent(
																																		jLabel9)
																																.addPreferredGap(
																																		javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																																.addComponent(
																																		jTextStationE,
																																		javax.swing.GroupLayout.PREFERRED_SIZE,
																																		62,
																																		javax.swing.GroupLayout.PREFERRED_SIZE)
																																.addGap(18,
																																		18,
																																		18)
																																.addComponent(
																																		jLabel16)
																																.addPreferredGap(
																																		javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																																.addComponent(
																																		jTextBeta,
																																		javax.swing.GroupLayout.PREFERRED_SIZE,
																																		59,
																																		javax.swing.GroupLayout.PREFERRED_SIZE))
																												.addGroup(
																														javax.swing.GroupLayout.Alignment.LEADING,
																														layout.createSequentialGroup()
																																.addComponent(
																																		jCheckBoxLinksBogen)
																																.addPreferredGap(
																																		javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																																.addComponent(
																																		jCheckBoxRechtsBogen)))
																								.addGap(24,
																										24,
																										24)
																								.addComponent(
																										jLabel5)
																								.addPreferredGap(
																										javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																								.addComponent(
																										jTextUeberhoehung,
																										javax.swing.GroupLayout.PREFERRED_SIZE,
																										44,
																										javax.swing.GroupLayout.PREFERRED_SIZE))
																				.addComponent(
																						jLabelUeArt,
																						javax.swing.GroupLayout.PREFERRED_SIZE,
																						339,
																						javax.swing.GroupLayout.PREFERRED_SIZE)))
												.addGroup(
														layout.createSequentialGroup()
																.addGap(48, 48,
																		48)
																.addComponent(
																		jLabelGleistyp,
																		javax.swing.GroupLayout.PREFERRED_SIZE,
																		204,
																		javax.swing.GroupLayout.PREFERRED_SIZE))
												.addGroup(
														layout.createSequentialGroup()
																.addContainerGap()
																.addGroup(
																		layout.createParallelGroup(
																				javax.swing.GroupLayout.Alignment.TRAILING)
																				.addGroup(
																						layout.createSequentialGroup()
																								.addComponent(
																										jButtonOK,
																										javax.swing.GroupLayout.PREFERRED_SIZE,
																										150,
																										javax.swing.GroupLayout.PREFERRED_SIZE)
																								.addPreferredGap(
																										javax.swing.LayoutStyle.ComponentPlacement.RELATED)
																								.addComponent(
																										jButtonCancel,
																										javax.swing.GroupLayout.PREFERRED_SIZE,
																										150,
																										javax.swing.GroupLayout.PREFERRED_SIZE))
																				.addComponent(
																						jScrollPane1,
																						javax.swing.GroupLayout.PREFERRED_SIZE,
																						866,
																						javax.swing.GroupLayout.PREFERRED_SIZE)
																				.addComponent(
																						jButtonNext,
																						javax.swing.GroupLayout.PREFERRED_SIZE,
																						160,
																						javax.swing.GroupLayout.PREFERRED_SIZE))))
								.addContainerGap(385, Short.MAX_VALUE)));
		layout.setVerticalGroup(layout
				.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
				.addGroup(
						layout.createSequentialGroup()
								.addContainerGap()
								.addGroup(
										layout.createParallelGroup(
												javax.swing.GroupLayout.Alignment.TRAILING)
												.addGroup(
														layout.createSequentialGroup()
																.addComponent(
																		jLabel1)
																.addGap(18, 18,
																		18)
																.addComponent(
																		jLabelGleistyp)
																.addGap(29, 29,
																		29)
																.addComponent(
																		jLabel4))
												.addComponent(
														jComboBoxElement,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE))
								.addGap(30, 30, 30)
								.addGroup(
										layout.createParallelGroup(
												javax.swing.GroupLayout.Alignment.BASELINE)
												.addComponent(jLabel3)
												.addComponent(
														jTextStation,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE)
												.addComponent(jLabel9)
												.addComponent(
														jTextStationE,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE)
												.addComponent(jLabel16)
												.addComponent(
														jTextBeta,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE))
								.addPreferredGap(
										javax.swing.LayoutStyle.ComponentPlacement.RELATED)
								.addGroup(
										layout.createParallelGroup(
												javax.swing.GroupLayout.Alignment.BASELINE)
												.addComponent(jLabel2)
												.addComponent(
														jTextRadius,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE)
												.addComponent(
														jCheckBoxLinksBogen)
												.addComponent(
														jCheckBoxRechtsBogen)
												.addComponent(
														jTextUeberhoehung,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE)
												.addComponent(jLabel5))
								.addGap(18, 18, 18)
								.addGroup(
										layout.createParallelGroup(
												javax.swing.GroupLayout.Alignment.BASELINE)
												.addComponent(
														jComboBoxUeBogen,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE)
												.addComponent(jLabel6)
												.addComponent(
														jLabelLaengeUeBogen)
												.addComponent(
														jTextLaengeUeBogen,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														javax.swing.GroupLayout.DEFAULT_SIZE,
														javax.swing.GroupLayout.PREFERRED_SIZE))
								.addPreferredGap(
										javax.swing.LayoutStyle.ComponentPlacement.RELATED)
								.addComponent(jLabelUeArt)
								.addGap(16, 16, 16)
								.addComponent(jButtonNext,
										javax.swing.GroupLayout.PREFERRED_SIZE,
										37,
										javax.swing.GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(
										javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
								.addComponent(jScrollPane1,
										javax.swing.GroupLayout.PREFERRED_SIZE,
										139,
										javax.swing.GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(
										javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
								.addGroup(
										layout.createParallelGroup(
												javax.swing.GroupLayout.Alignment.BASELINE)
												.addComponent(
														jButtonCancel,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														37,
														javax.swing.GroupLayout.PREFERRED_SIZE)
												.addComponent(
														jButtonOK,
														javax.swing.GroupLayout.PREFERRED_SIZE,
														37,
														javax.swing.GroupLayout.PREFERRED_SIZE))
								.addContainerGap(217, Short.MAX_VALUE)));
		validateInput();
		continueInput();
		isValidSession();
		pack();
	}

	/**
	 * Leeren und Vorbereiten der Textfelder für folgendes Element
	 */
	public void continueInput() {
		if (!table.isEmpty()) {
			lastAddedDaoK = Manager.getInstance().getKruemmungslinienElemente()
					.last();
			jTextStation.setText(format2.format(Double.valueOf(lastAddedDaoK
					.getEndstationierungInMeter())));
			jTextStationE.requestFocusInWindow();
			if (lastAddedDaoK.getUeberhoehung() != 0) {
				jTextUeberhoehung.setText(Integer.valueOf(
						lastAddedDaoK.getUeberhoehung()).toString());
			}
			jComboBoxElement.setSelectedItem(lastAddedDaoK.getElement()
					.toString());
			switchComboBox();
		}
	}

	/**
	 * Anpassen des Dialogs, abhängig vom Geomatrieelement
	 * 
	 * @param element
	 */
	private void showInputFieldsForElement(String element) {

		if ("Gerade".equals(element)) {
			jTextStationE.setVisible(true);
			jLabel3.setText("Anfangsstationierung");
			jLabel9.setText("Endstationierung");
			jLabel9.setVisible(true);
			jTextBeta.setVisible(true);
			jLabel16.setVisible(true);
			jTextStationE.requestFocusInWindow();

			jTextRadius.setVisible(false);
			jTextRadius.setText("");
			jLabel2.setVisible(false);
			jCheckBoxLinksBogen.setVisible(false);
			jCheckBoxRechtsBogen.setVisible(false);
			jComboBoxUeBogen.setVisible(false);
			jLabelLaengeUeBogen.setVisible(false);
			jLabelUeArt.setVisible(false);
			jTextLaengeUeBogen.setVisible(false);
			jTextLaengeUeBogen.setText("");
			jTextUeberhoehung.setVisible(false);
			jTextUeberhoehung.setText("");
			jLabel5.setVisible(false);

		} else if ("Kreisbogen".equals(element)) {
			jTextRadius.setVisible(true);
			jLabel2.setVisible(true);
			jLabel3.setText("BA");
			jLabel9.setText("BE");
			jCheckBoxLinksBogen.setVisible(true);
			jCheckBoxRechtsBogen.setVisible(true);
			jTextStationE.setVisible(true);
			jTextUeberhoehung.setVisible(true);
			jLabel5.setVisible(true);
			jTextStationE.requestFocusInWindow();

			jComboBoxUeBogen.setVisible(false);
			jLabelLaengeUeBogen.setVisible(false);
			jLabelUeArt.setVisible(false);
			jTextLaengeUeBogen.setVisible(false);
			jTextLaengeUeBogen.setText("");
			jLabel16.setVisible(false);
			jTextBeta.setVisible(false);
			jTextBeta.setText("");
		} else if ("Übergangsbogen".equals(element)) {
			jComboBoxUeBogen.setVisible(true);
			jLabelLaengeUeBogen.setVisible(true);
			jLabelUeArt.setVisible(true);
			jTextLaengeUeBogen.setVisible(true);
			jTextStationE.setVisible(true);
			jTextStationE.requestFocusInWindow();

			jTextRadius.setVisible(false);
			jTextRadius.setText("");
			jLabel2.setVisible(false);
			jLabel3.setText("UA");
			jLabel9.setText("UE");
			jCheckBoxLinksBogen.setVisible(false);
			jCheckBoxRechtsBogen.setVisible(false);
			jLabel16.setVisible(false);
			jTextBeta.setVisible(false);
			jTextBeta.setText("");
			jTextUeberhoehung.setVisible(false);
			jTextUeberhoehung.setText("");
			jLabel5.setVisible(false);

		}
		pack();
	}

	/**
	 * Anpassen des Dialogs, abhängig vom Übergangsbogen
	 * 
	 * @param selectedItemUeBogen
	 */
	private void showInputFieldsForUeBogen(Object selectedItemUeBogen) {
		if ("UA".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Klothoide");
			jLabelLaengeUeBogen.setText("lU =");
			jLabel3.setText("UA");
			jLabel9.setText("UE");
		}
		if ("UE".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Klothoide");
			jLabelLaengeUeBogen.setText("lU =");
			jLabel3.setText("UE");
			jLabel9.setText("UA");
		}
		if ("UAs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Schramm");
			jLabelLaengeUeBogen.setText("lUs =");
			jLabel3.setText("UAs");
			jLabel9.setText("UEs");
		}
		if ("UEs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Schramm");
			jLabelLaengeUeBogen.setText("lUs =");
			jLabel3.setText("UEs");
			jLabel9.setText("UAs");
		}
		if ("UAB".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Bloss");
			jLabelLaengeUeBogen.setText("lUB =");
			jLabel3.setText("UAB");
			jLabel9.setText("UEB");
		}
		if ("UEB".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("S- förmig nach Bloss");
			jLabelLaengeUeBogen.setText("lUB =");
			jLabel3.setText("UEB");
			jLabel9.setText("UAB");
		}
		if ("UAss".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Schramm");
			jLabelLaengeUeBogen.setText("lUss =");
			jLabel3.setText("UAss");
			jLabel9.setText("UEss");
		}
		if ("UABs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Bloss");
			jLabelLaengeUeBogen.setText("lUBs =");
			jLabel3.setText("UABs");
			jLabel9.setText("UEBs");
		}
		if ("UEss".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Schramm");
			jLabelLaengeUeBogen.setText("lUss =");
			jLabel3.setText("UEss");
			jLabel9.setText("UAss");
		}
		if ("UEBs".equals(selectedItemUeBogen)) {
			jLabelUeArt.setText("Gleisschere nach Bloss");
			jLabelLaengeUeBogen.setText("lUBs =");
			jLabel3.setText("UEBs");
			jLabel9.setText("UABs");
		}
	}

	public int showKruemmungslinienDialog() {
		setVisible(true);
		return returnValue;
	}

	/**
	 * Methode löscht alle bisherigen Überhöhungselemente, und erzeugt für alle
	 * Krümmungslinienelemente, die zum Zeitpunkt des Methodenaufrufs in der
	 * Tablle existieren, falls notwendig ein passendes
	 * Überhöhungslinienelement.
	 */
	private void createUeberhoehungen() {
		// alten Überhöhungselemente erstmal löschen
		Manager.getInstance().getUeberhoehungslinienElemente().clear();
		List<KruemmungslinienDAO> kruemmungslinienElemente = table
				.getKruemmungslinienElemente();

		UeberhoehungslinienDAO lastDAOU = null;
		KruemmungslinienDAO daoK;
		for (int i = 0; i < kruemmungslinienElemente.size(); i++) {
			daoK = kruemmungslinienElemente.get(i);

			if (daoK.getElement().equals("Übergangsbogen")
					|| daoK.getUeberhoehung() > 0) {
				int ueberhoehungInMM = Integer.valueOf(daoK.getUeberhoehung()) != 0
						? Integer.valueOf(daoK.getUeberhoehung())
						: 0;
				double stationierungInMeterUe = daoK.getStationierungInMeter();
				double endstationierungInMeterUE = daoK
						.getEndstationierungInMeter();

				Ueberhoehungsrampe ueberhoehungsrampe = null;
				if (daoK.getUebergangsbogen() == Uebergangsbogen.UA) {
					ueberhoehungsrampe = Ueberhoehungsrampe.RA;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UE) {
					ueberhoehungsrampe = Ueberhoehungsrampe.RE;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UAs) {
					ueberhoehungsrampe = Ueberhoehungsrampe.RAs;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEs) {
					ueberhoehungsrampe = Ueberhoehungsrampe.REs;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UAB) {
					ueberhoehungsrampe = Ueberhoehungsrampe.RAB;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEB) {
					ueberhoehungsrampe = Ueberhoehungsrampe.REB;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UAss) {
					ueberhoehungsrampe = Ueberhoehungsrampe.RAss;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UABs) {
					ueberhoehungsrampe = Ueberhoehungsrampe.RABs;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEss) {
					ueberhoehungsrampe = Ueberhoehungsrampe.REss;
				} else if (daoK.getUebergangsbogen() == Uebergangsbogen.UEBs) {
					ueberhoehungsrampe = Ueberhoehungsrampe.REBs;
				} else {
					ueberhoehungsrampe = Ueberhoehungsrampe.NONE;
				}

				double laengeRampe = daoK.getLaengeUeBogen() != 0 ? daoK
						.getLaengeUeBogen() : 0;

				UeberhoehungslinienDAO daoU = new UeberhoehungslinienDAO(
						stationierungInMeterUe, ueberhoehungInMM,
						endstationierungInMeterUE, ueberhoehungsrampe,
						laengeRampe);
				if (i > 0) {
					UeberhoehungslinienDAO rampe = createRampeIfNeeded(
							kruemmungslinienElemente.get(i - 1),
							kruemmungslinienElemente.get(i));
					if (rampe != null) {
						lastDAOU.setEndstationierungInMeterUE(rampe
								.getStationierungInMeterUe());
						daoU.setStationierungInMeterUe(rampe
								.getEndstationierungInMeterUE());
						Manager.getInstance().addProjektChange(
								new AddProjektElement(rampe));
					}
				}

				lastDAOU = daoU;

				Manager.getInstance().addProjektChange(
						new AddProjektElement(daoU));
			} else {

			}
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == jButtonOK) {

			if (isValidSession()) {
				// Änderungen in XML-Datei übernehmen
				createUeberhoehungen();
				Manager.getInstance().applyChanges();
				setVisible(false);
				dispose();
			} else {
				JOptionPane.showMessageDialog(this,
						"Bitte überprüfen Sie die gelben Fehler!");
			}
		} else if (e.getSource() == jButtonCancel) {
			returnValue = JOptionPane.CANCEL_OPTION;
			askForClosing();

		} else if (e.getSource() == jButtonNext) {
			if (isValidInput()) {

				String element = jComboBoxElement.getSelectedItem().toString();
				double stationierungInMeter = Double.valueOf(jTextStation
						.getText());
				double endstationierungInMeter = !jTextStationE.getText()
						.isEmpty()
						? Double.valueOf(jTextStationE.getText())
						: 0;
				Uebergangsbogen uebergangsbogen = (Uebergangsbogen) (!jTextLaengeUeBogen
						.getText().isEmpty()
						? Uebergangsbogen.valueOf(jComboBoxUeBogen
								.getSelectedItem().toString())
						: Uebergangsbogen.NONE);
				double radius = !jTextRadius.getText().isEmpty()
						&& jCheckBoxLinksBogen.isSelected() ? (Double
						.valueOf(jTextRadius.getText())) * (-1) : !jTextRadius
						.getText().isEmpty()
						&& !jCheckBoxLinksBogen.isSelected() ? Double
						.valueOf(jTextRadius.getText()) : 0;
				double rp = !jTextBeta.getText().isEmpty() ? Double
						.valueOf(jTextBeta.getText()) : 0;
				double laengeUeBogen = !jTextLaengeUeBogen.getText().isEmpty()
						? Double.valueOf(jTextLaengeUeBogen.getText())
						: 0;
				int ueberhoehung = !jTextUeberhoehung.getText().isEmpty()
						? Integer.valueOf(jTextUeberhoehung.getText())
						: 0;

				KruemmungslinienDAO daoK = new KruemmungslinienDAO(element,
						stationierungInMeter, radius, ueberhoehung,
						endstationierungInMeter, rp, uebergangsbogen,
						laengeUeBogen);
				if (element2Edit != null) {
					table.replaceKruemmungslinienElement(element2Edit, daoK);
					Manager.getInstance().addProjektChange(
							new UpdateProjektElement(element2Edit, daoK));
					element2Edit = null;
				} else {
					table.addKruemmungslinienElement(daoK);
					Manager.getInstance().addProjektChange(
							new AddProjektElement(daoK));
				}
				lastAddedDaoK = daoK;

				clearInput();
				validateInput();
				isValidSession();
				returnValue = JOptionPane.OK_OPTION;
			}
		}
	}

	/**
	 * Test ob die Änderungen in der aktuellen Sitzung gültig sind.
	 * 
	 * @return
	 */
	private boolean isValidSession() {
		table.resetHighlighting();
		List<KruemmungslinienDAO> kruemmungslinienElemente = table
				.getKruemmungslinienElemente();
		KruemmungslinienDAO el1;
		KruemmungslinienDAO el2;
		for (int i = 0; i < kruemmungslinienElemente.size() - 1; i++) {
			el1 = kruemmungslinienElemente.get(i);
			el2 = kruemmungslinienElemente.get(i + 1);
			if (el1.getEndstationierungInMeter() != el2
					.getStationierungInMeter()) {
				table.highlightCell(i, 2);
				table.highlightCell(i + 1, 1);
				return false;
			} else if (el1.getRadius() < 0 && el2.getRadius() > 0
					&& el1.getUeberhoehung() != 0) {
				table.highlightCell(i, 3);
				table.highlightCell(i + 1, 3);
			} else if (el1.getRadius() > 0 && el2.getRadius() < 0
					&& el1.getUeberhoehung() != 0) {
				table.highlightCell(i, 3);
				table.highlightCell(i + 1, 3);
			} else if (el1.getElement().equals("Gerade")
					&& el2.getElement().equals("Gerade") && el1.getRp() == 0) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 0);
				table.highlightCell(i, 5);
				return false;
			} else if (el1.getElement().equals("Kreisbogen")
					&& el1.getUeberhoehung() != 0
					&& el2.getElement().equals("Gerade")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 0);
				table.highlightCell(i, 4);
				return false;
			} else if (el2.getElement().equals("Kreisbogen")
					&& el2.getUeberhoehung() != 0
					&& el1.getElement().equals("Gerade")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 0);
				table.highlightCell(i + 1, 4);
				return false;
			} else if (el2.getElement().equals("Kreisbogen")
					&& el2.getUeberhoehung() != 0
					&& el1.getUebergangsbogen().toString().equals("UE")) {
				table.highlightCell(i + 1, 0);
				table.highlightCell(i, 6);
				table.highlightCell(i + 1, 4);
				return false;
			} else if (el2.getElement().equals("Kreisbogen")
					&& el2.getUeberhoehung() != 0
					&& el1.getUebergangsbogen().toString().equals("UEs")) {
				table.highlightCell(i + 1, 0);
				table.highlightCell(i, 6);
				table.highlightCell(i + 1, 4);
				return false;
			} else if (el2.getElement().equals("Kreisbogen")
					&& el2.getUeberhoehung() != 0
					&& el1.getUebergangsbogen().toString().equals("UEB")) {
				table.highlightCell(i + 1, 0);
				table.highlightCell(i, 6);
				table.highlightCell(i + 1, 4);
				return false;
			} else if (el1.getElement().equals("Kreisbogen")
					&& el1.getUeberhoehung() != 0
					&& el2.getUebergangsbogen().toString().equals("UAB")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 6);
				table.highlightCell(i, 4);
				return false;
			} else if (el1.getElement().equals("Kreisbogen")
					&& el1.getUeberhoehung() != 0
					&& el2.getUebergangsbogen().toString().equals("UAs")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 6);
				table.highlightCell(i, 4);
				return false;
			} else if (el1.getElement().equals("Kreisbogen")
					&& el1.getUeberhoehung() != 0
					&& el2.getUebergangsbogen().toString().equals("UA")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 6);
				table.highlightCell(i, 4);
				return false;
			} else if (el1.getElement().equals("Gerade")
					&& el2.getElement().equals("Übergangsbogen")
					&& el2.getUebergangsbogen().toString().equals("UEB")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 0);
				table.highlightCell(i + 1, 6);
				return false;
			} else if (el1.getElement().equals("Gerade")
					&& el2.getElement().equals("Übergangsbogen")
					&& el2.getUebergangsbogen().toString().equals("UE")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 0);
				table.highlightCell(i + 1, 6);
				return false;
			} else if (el1.getElement().equals("Gerade")
					&& el2.getElement().equals("Übergangsbogen")
					&& el2.getUebergangsbogen().toString().equals("UEs")) {
				table.highlightCell(i, 0);
				table.highlightCell(i + 1, 0);
				table.highlightCell(i + 1, 6);
				return false;
			} else if (el1.getElement().equals("Gerade") && el1.getRp() != 0
					&& !el2.getElement().equals("Gerade")) {
				table.highlightCell(i, 0);
				table.highlightCell(i, 5);
				table.highlightCell(i + 1, 0);
			}
		}

		return true;
	}

	/**
	 * Erzwingen von mindestens einer kompletten Eingabe zur Krümmung
	 */
	private void validateInput() {
		jButtonOK.setEnabled(!table.isEmpty());
	}

	/**
	 * Test ob die aktuellen Eingaben gültig sind.
	 * 
	 * @return
	 */

	private boolean isValidInput() {
		Integer v = Manager.getInstance().getProjekt().getGeschwindigkeit();
		Double stationAnf = Manager.getInstance().getGleisElemente()
				.get(returnValue).getAnfangsStation();

		if (table.isEmpty()
				&& Math.abs(Double.valueOf(jTextStation.getText())
						- Manager.getInstance().getGleisElemente()
								.get(returnValue).getAnfangsStation()) >= 1) {
			JOptionPane
					.showMessageDialog(this, AnfStationException,
							"Falsche Anfangsstationierung",
							JOptionPane.WARNING_MESSAGE);
			jTextStation.setText(stationAnf.toString());
			return false;
		}
		if (jTextStation.getText().isEmpty()) {
			JOptionPane.showMessageDialog(this, StationException,
					"Fehlende Stationierung", JOptionPane.WARNING_MESSAGE);
			return false;
		}
		if (jTextStationE.isVisible()) {
			if (jTextStationE.getText().isEmpty()) {
				JOptionPane.showMessageDialog(this, EndStationException,
						"Falscher Wert für Endstationierung",
						JOptionPane.WARNING_MESSAGE);
				return false;
			} else if (Double.valueOf(jTextStationE.getText()) <= Double
					.valueOf(jTextStation.getText())) {
				JOptionPane.showMessageDialog(this, EndStationException,
						"Falscher Wert für Endstationierung",
						JOptionPane.WARNING_MESSAGE);
				return false;
			}
		}
		if (jTextBeta.isVisible()) {
			if (!jTextBeta.getText().isEmpty()) {
				try {
					if (Double.valueOf(jTextBeta.getText()) >= 200.063662) {
						JOptionPane.showMessageDialog(this, BetaException,
								"Beta außerhalb des Wertebreichs",
								JOptionPane.WARNING_MESSAGE);
						return false;
					} else {
						try {
							if (Double.valueOf(jTextBeta.getText()) <= 199.936338) {
								JOptionPane.showMessageDialog(this,
										BetaException,
										"Beta außerhalb des Wertebreichs",
										JOptionPane.WARNING_MESSAGE);
								return false;
							}
						} catch (HeadlessException e1) {
							e1.printStackTrace();

						}
					}
				} catch (HeadlessException e1) {
					e1.printStackTrace();
				}
			}
		}
		if (jTextRadius.isVisible()) {
			if (jTextRadius.getText().isEmpty()) {
				JOptionPane.showMessageDialog(this, RadiusException,
						"Fehlender Radius", JOptionPane.WARNING_MESSAGE);
				return false;
			} else if ((7.1 * v * v) / Double.valueOf(jTextRadius.getText()) >= 15
					&& jTextUeberhoehung.getText().isEmpty()) {
				String ueberhNeu = format1.format((7.1 * v * v)
						/ Integer.valueOf(jTextRadius.getText()));
				jTextUeberhoehung.setText(ueberhNeu.toString());
				JOptionPane.showMessageDialog(this, UeberhException,
						"Fehlende Überhöhung", JOptionPane.WARNING_MESSAGE);
				return false;
			}
		}
		if (jTextLaengeUeBogen.isVisible()) {
			if (jTextLaengeUeBogen.getText().isEmpty()) {
				JOptionPane.showMessageDialog(this, LaengeException,
						"Länge UeBogen", JOptionPane.WARNING_MESSAGE);
				return false;
			} else if (Math.abs(Double.valueOf(jTextStationE.getText())
					- Double.valueOf(jTextStation.getText())
					- Double.valueOf(jTextLaengeUeBogen.getText())) >= 0.1) {
				JOptionPane.showMessageDialog(this, LaengeException,
						"Länge UeBogen", JOptionPane.WARNING_MESSAGE);
				return false;
			}
		}
		return true;
	}

	/*
	 * Iteriert über alle Überhöhungen und fügt zwischen 2 aufeinanderfolgenden
	 * Kreisbogen eine Rampe ein.
	 */
	private UeberhoehungslinienDAO createRampeIfNeeded(
			KruemmungslinienDAO daoK1, KruemmungslinienDAO daoK2) {
		UeberhoehungslinienDAO daoU = null;
		if (daoK1.getElement().equals("Kreisbogen")
				&& daoK2.getElement().equals("Kreisbogen")
				&& daoK1.getUeberhoehung() != 0 && daoK2.getUeberhoehung() != 0) {
			int v = Manager.getInstance().getProjekt().getGeschwindigkeit();
			int u1 = daoK1.getUeberhoehung();
			int u2 = daoK2.getUeberhoehung();
			double station_2 = daoK2.getStationierungInMeter();
			int du = Math.abs(u2 - u1);
			double lr = 8 * v * du / 1000.0;
			Ueberhoehungsrampe rampenID = ((u2 - u1) < 1)
					? Ueberhoehungsrampe.RE
					: Ueberhoehungsrampe.RA;
			double station_2_1 = station_2 - lr / 2;
			double station_2_2 = station_2_1 + lr;

			daoU = new UeberhoehungslinienDAO(station_2_1, 0, station_2_2,
					rampenID, lr);

		}
		return daoU;

	}

	/**
	 * Alle Eingabeelemente zurücksetzen.
	 */
	private void clearInput() {
		jTextBeta.setText("");
		if (!jTextStationE.getText().isEmpty()) {
			Double stationNeu = Double.valueOf(jTextStationE.getText());
			jTextStation.setText(format2.format((stationNeu)));
		}
		jCheckBoxLinksBogen.setSelected(false);
		jCheckBoxRechtsBogen.setSelected(false);
		jTextStationE.setText("");
		jTextRadius.setText("");
		jTextLaengeUeBogen.setText("");
		switchComboBox();
		jTextUeberhoehung.setText("");
		jTextStationE.requestFocusInWindow();
	}

	/**
	 * Anzeige des entsprechenden Folgeelementes
	 */
	private void switchComboBox() {
		if (jComboBoxElement.getSelectedItem().equals("Übergangsbogen")) {
			if (jComboBoxUeBogen.getSelectedItem().equals("UA")) {
				jComboBoxElement.setSelectedItem("Kreisbogen");
			} else if (jComboBoxUeBogen.getSelectedItem().equals("UAs")) {
				jComboBoxElement.setSelectedItem("Kreisbogen");
			} else if (jComboBoxUeBogen.getSelectedItem().equals("UAB")) {
				jComboBoxElement.setSelectedItem("Kreisbogen");
			} else if (jComboBoxUeBogen.getSelectedItem().equals("UE")) {
				jComboBoxElement.setSelectedItem("Gerade");
			} else if (jComboBoxUeBogen.getSelectedItem().equals("UEs")) {
				jComboBoxElement.setSelectedItem("Gerade");
			} else if (jComboBoxUeBogen.getSelectedItem().equals("UEB")) {
				jComboBoxElement.setSelectedItem("Gerade");
			}
		} else if (jComboBoxElement.getSelectedItem().equals("Kreisbogen")) {
			if (!jTextUeberhoehung.getText().isEmpty()) {
				jComboBoxElement.setSelectedItem("Übergangsbogen");
				jComboBoxUeBogen.setSelectedItem("UE");
			} else if (jTextUeberhoehung.getText().isEmpty()) {
				jComboBoxElement.setSelectedItem("Gerade");
			}
		}
	}

	/**
	 * Löschen der ausgewählten Reihe der Tabelle
	 */
	private void deleteSelectedRow() {
		int selectedRowIndex = table.getSelectedRow();
		if (selectedRowIndex > -1) {
			KruemmungslinienDAO removedDAO = table
					.removeKruemmungslinienElement(selectedRowIndex);
			Manager.getInstance().addProjektChange(
					new RemoveProjektElement(removedDAO));
		}

	}

	@Override
	public void keyPressed(KeyEvent e) {
		if (e.getSource() == table) {
			if (e.getKeyCode() == KeyEvent.VK_DELETE) {
				deleteSelectedRow();
			}
		} else if (e.getSource() == jButtonCancel) {
			if (e.getKeyCode() == KeyEvent.VK_ENTER) {
				jButtonCancel.doClick();
			}
		} else if (e.getSource() == jButtonOK) {
			if (e.getKeyCode() == KeyEvent.VK_ENTER) {
				jButtonOK.doClick();
			}
		} else if (e.getSource() == jButtonNext) {
			if (e.getKeyCode() == KeyEvent.VK_ENTER) {
				jButtonNext.doClick();
			}
		}
	}

	/**
	 * Eingabefelder mit den Daten zu gegebenen Element füllen.
	 * 
	 * @param dao
	 */
	private void loadElement(KruemmungslinienDAO dao) {
		clearInput();

		if (dao.getRp() != 0) {
			jTextBeta.setText(format3.format(Double.valueOf(dao.getRp())));
		}
		jTextStation.setText(format2.format((Double.valueOf(dao
				.getStationierungInMeter()))));
		jTextStationE.setText(format2.format((Double.valueOf(dao
				.getEndstationierungInMeter()))));
		if (dao.getRadius() < 0) {
			jCheckBoxLinksBogen.setSelected(true);
		} else {
			jCheckBoxRechtsBogen.setSelected(true);
		}
		jTextRadius.setText(Integer.valueOf((int) Math.abs(dao.getRadius()))
				.toString());
		if (dao.getUeberhoehung() != 0) {
			jTextUeberhoehung.setText(Integer.valueOf(dao.getUeberhoehung())
					.toString());
		}
		jTextLaengeUeBogen.setText(format2.format((dao.getLaengeUeBogen())));
		jComboBoxElement.setSelectedItem(dao.getElement().toString());
		showInputFieldsForElement(dao.getElement());
		jComboBoxUeBogen.setSelectedItem(dao.getUebergangsbogen().toString());
		showInputFieldsForUeBogen(dao.getUebergangsbogen());
		jTextStation.requestFocusInWindow();
	}

	@Override
	public void keyReleased(KeyEvent arg0) {

	}

	@Override
	public void keyTyped(KeyEvent arg0) {

	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// bei Doppelklick auf eine Zeile in der Tabelle die Daten des
		// zugehörigen Elements in den Eingabefeldern anzeigen
		if (e.getClickCount() == 2) {
			int row = table.rowAtPoint(e.getPoint());
			element2Edit = table.getElementAtRow(row);
			if (element2Edit != null) {
				loadElement(element2Edit);
			}
		}
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}

	@Override
	public void mousePressed(MouseEvent e) {
	}

	@Override
	public void mouseReleased(MouseEvent e) {
	}

}
